package com.shuo.dsa.niuke;

import java.util.ArrayList;

/**
 * 输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字
 * 思路:
 * 顺时针打印就是按圈数循环打印，一圈包含两行或者两列，在打印的时候会出现某一圈中只包含一行，
 * 要判断从左向右打印和从右向左打印的时候是否会出现重复打印，同样只包含一列时，
 * 要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况
 */
public class PrintMatrix {
    public ArrayList<Integer> printMatrix(int[][] matrix) {
        ArrayList<Integer> ret = new ArrayList<>();
        int row = matrix.length;
        int col = matrix[0].length;
        int circle = ((row < col ? row : col) - 1) / 2 + 1;
        for (int i = 0; i < circle; i++) {
            for (int j = i; j < col - i; j++) {
                ret.add(matrix[i][j]);
            }
            for (int j = i + 1; j < row - i; j++) {
                ret.add(matrix[j][col - 1 - i]);
            }
            for (int j = col - i - 2; j >= i && row - i - 1 != i; j--) {
                ret.add(matrix[row - i - 1][j]);
            }
            for (int j = row - i - 2; j > i && col - i - 1 != i; j--) {
                ret.add(matrix[j][i]);
            }
        }
        return ret;
    }
}
